package com.chen.root.base;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @author: Long
 * @date: 2023/7/16 20:14
 **/
@Data
public final class PageData<T> implements Serializable {

    /** 当前页 */
    @ApiModelProperty(value = "当前页")
    private Integer current;

    /** 页大小 */
    @ApiModelProperty(value = "页大小")
    private Integer size;

    /** 总数 */
    @ApiModelProperty(value = "总数")
    private long total;

    /** 是否存在下一页：true-存在下一页 */
    @ApiModelProperty(value = "是否存在下一页：true-存在下一页")
    private boolean hasNext;

    /** 数据集 */
    @ApiModelProperty(value = "数据集")
    private List<T> records;

    /**
     * 构建分页实体
     * @param current 当前页
     * @param size 页大小
     * @param total 总数
     * @param list 数据集
     * @return 分页实体
     */
    public static <T> PageData<T> build(Integer current, Integer size,
                                        Long total, List<T> list){
        PageData<T> page = new PageData<>();
        page.setCurrent(current);
        page.setSize(size);
        page.setTotal(total);
        page.setRecords(list);
        page.setHasNext(page.hasNext());

        return page;
    }

    /**
     * 是否存在下一页
     * @return true-存在下一页，反之false
     */
    public boolean hasNext(){
        // 取余，根据余数是否为0判断能否被整除
        long remain = this.total % this.size;
        return this.current < (this.total / this.size + (remain != 0 ? 1 : 0));
    }

}
